package edu.erpan.bl.bean;

import java.util.List;

import javax.ejb.Remote;

import edu.erpan.bl.entities.LineaDetalleIngresoMp;
import edu.erpan.bl.entities.MateriaPrima;
import edu.erpan.bl.entities.Opcion;
import edu.erpan.bl.entities.Proveedor;
import edu.erpan.bl.entities.RecepcionMateriaPrima;
import edu.erpan.util.entityManager.IGenericEntityManager;
import edu.erpan.util.entityManager.exceptions.IdNotFoundException;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;

@Remote
public interface MateriaPrimaBeanRemote extends IGenericEntityManager<MateriaPrima> {

	
	public MateriaPrima consultarMateriaPrima(MateriaPrima materiaPrima)throws QueryException, IdNotFoundException;
	
	public List<MateriaPrima> consultarMateriasPrimas() throws QueryException;

	public List<Opcion> consultarOpciones(String categoria) throws QueryException;
	
	/**
	 * Consultar los proveedores existentes, en caso de que el parametro activo sea nulo se consultaran
	 * todos los proveedores independientemente de su estado
	 * 
	 * @param activo
	 * @return lista de proveedores
	 * @throws QueryException
	 *
	 * @author Jeison
	 * @date 19/09/2012
	 */
	public List<Proveedor> consultarProveedores(Boolean activo) throws QueryException;
	
	/**
	 * Guarda una recepcion de materia prima y sus lineas de detalle
	 * 
	 * @param recepcionMateriaPrima
	 * @throws PersistException
	 *
	 * @author Jeison
	 * @date 22/09/2012
	 */
	public void guardarRecepcionMateriaPrima(RecepcionMateriaPrima recepcionMateriaPrima,List<LineaDetalleIngresoMp>listaLineasDetalleIngresoMp) throws PersistException;
	
	/**
	 * Consultar una recepcion de materia prima
	 * 
	 * @param recepcionMateriaPrima
	 * @throws QueryException
	 *
	 * @author Jeison
	 * @date 01/30/2012
	 */
	public RecepcionMateriaPrima consultarRecepcionMateriaPrima(RecepcionMateriaPrima recepcionMateriaPrima) throws QueryException;
	
	/**
	 * Editar recepcion de materia prima y sus lineas de detalle
	 * 
	 * @param recepcionMateriaPrima
	 * @throws PersistException
	 *
	 * @author Jeison
	 * @date 22/09/2012
	 */
	public void editarRecepcionMateriaPrima(RecepcionMateriaPrima recepcionMateriaPrima) throws PersistException;
	
	/**
	 * Elimina una recepcion de materia prima y sus lineas de detalle
	 * 
	 * @param recepcionMateriaPrima
	 * @throws QueryException
	 *
	 * @author Jeison
	 * @date 22/09/2012
	 */
	public void eliminarRecepcionMateriaPrima(RecepcionMateriaPrima recepcionMateriaPrima) throws QueryException;
	
	/**
	 * Consulta las recepciones de materia prima
	 * 
	 * @return
	 * @throws QueryException
	 *
	 * @author Jeison
	 * @date 22/09/2012
	 */
	public List<RecepcionMateriaPrima> consultarRecepcionesMateriaPrima() throws QueryException;
	/**
	 * Consulta las lineas de detalle de una recepcion
	 * 
	 * @return
	 * @throws QueryException
	 *
	 * @author Jeison
	 * @date 22/09/2012
	 */
	public List<LineaDetalleIngresoMp> consultarLineasDetalleRecepcion(RecepcionMateriaPrima recepcionMateriaPrima) throws QueryException;

	/**
	 * Guarda una recepcion de materia prima y sus lineas de detalle
	 * 
	 * @param proveedor
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void guardarProveedor(Proveedor proveedor) throws PersistException;

	/**
	 * Editar una recepcion de materia prima y sus lineas de detalle
	 * 
	 * @param proveedor
	 *
	 * @author Jeison
	 * @date 4/11/2012
	 */
	public void editarProveedor(Proveedor proveedor) throws PersistException;

	/**
	 * Consultar un proveedor
	 * 
	 * @param proveedor
	 * @return
	 *
	 * @author Jeison
	 * @date 5/11/2012
	 */
	public Proveedor consultarProveedor(Proveedor proveedor) throws QueryException,IdNotFoundException;
	
}
